package com.wh.wisdomsite.xbox.common.client;

import com.wh.wisdomsite.xbox.common.XboxRequest;

/**
 * 声明ClientRequest接口
 * @Package com.wh.wisdomsite.xbox.common.client
 * @author 谢泽鹏
 * @date 2014年10月8日 下午4:02:14
 * @Copyright 个人版权所有
 * @Company 贵州万华科技有限公司Copyright (c) 2014
 * @version V1.0
 */
public interface ClientRequest {


    /**
     * 添加参数,默认需要签名
     * @param paramName
     * @param paramValue
     * @return
     */
    ClientRequest addParam(String paramName, Object paramValue);


    /**
     * 清除参数
     * @return
     */
    ClientRequest clearParam();


    /**
     * 发起POST请求
     * @param clazz      类对象
     * @param methodName 方法名
     * @param version    版本号
     * @param <T>        返回类型
     * @return
     */
    <T> CompositeResponse post(Class<T> clazz, String methodName, String version);


    /**
     * 发起POST请求(带会话标识)
     * @param clazz      类对象
     * @param methodName 方法名
     * @param version    版本号
     * @param sessionId  会话标识
     * @param <T>        返回类型
     * @return
     */
    <T> CompositeResponse post(Class<T> clazz, String methodName, String version, String sessionId);


    /**
     * 发起POST请求(直接使用)
     * @param xboxRequest 接口对象
     * @param clazz       类对象
     * @param methodName  方法名
     * @param version     版本号
     * @param <T>         返回类型
     * @return
     */
    <T> CompositeResponse post(XboxRequest xboxRequest, Class<T> clazz, String methodName, String version);


    /**
     * 发起POST请求,(直接使用并带会话标识)
     * @param xboxRequest 接口对象
     * @param clazz       类对象
     * @param methodName  方法名
     * @param version     版本号
     * @param sessionId   会话标识
     * @param <T>         返回类型
     * @return
     */
    <T> CompositeResponse post(XboxRequest xboxRequest, Class<T> clazz, String methodName, String version, String sessionId);


    /**
     * 发起GET请求
     * @param clazz      类对象
     * @param methodName 方法名
     * @param version    版本号
     * @param <T>        返回类型
     * @return
     */
    <T> CompositeResponse get(Class<T> clazz, String methodName, String version);


    /**
     * 发送GET请求(带会话标识)
     * @param clazz       类对象
     * @param methodName  方法名
     * @param version     版本号
     * @param sessionId   会话标识
     * @param <T>         返回类型
     * @return
     */
    <T> CompositeResponse get(Class<T> clazz, String methodName, String version, String sessionId);


    /**
     * 发送GET请求(直接使用)
     * @param xboxRequest 接口对象
     * @param clazz      类对象
     * @param methodName 方法名
     * @param version    版本号
     * @param <T>        返回类型
     * @return
     */
    <T> CompositeResponse get(XboxRequest xboxRequest, Class<T> clazz, String methodName, String version);


    /**
     * 发送GET请求(直接使用并带会话标识)
     * @param xboxRequest 接口对象
     * @param clazz      类对象
     * @param methodName 方法名
     * @param version    版本号
     * @param sessionId  会话标识
     * @param <T>        返回类型
     * @return
     */
    <T> CompositeResponse get(XboxRequest xboxRequest, Class<T> clazz, String methodName, String version, String sessionId);
}

